/*!
 * @file segmented.h
 * @author Yasutomo Kawanishi
 * @date Last Change: 2011/Feb/23.
 * */
#ifndef __BACKGROUND_IMAGE_GENERATOR_SEGMENTED_H__
#define __BACKGROUND_IMAGE_GENERATOR_SEGMENTED_H__
#include "common.h"
#include <vector>

template <class Generator>
class BackgroundImageGeneratorSegmented{
	typedef std::vector<
		std::pair<Generator, std::pair<int, int> >
	> Generators;

public:
	BackgroundImageGeneratorSegmented();
	~BackgroundImageGeneratorSegmented();
	BackgroundImageGeneratorSegmented(const BackgroundImageGeneratorSegmented& other);
	const BackgroundImageGeneratorSegmented<Generator>& operator=(const BackgroundImageGeneratorSegmented& other);

	void generate(const cv::Mat& src, cv::Mat& dst);
	void update(const cv::Mat& src);
	void train(const std::vector<cv::Mat>& src);

	void save(const std::string& _path)const;
	void load(const std::string& _path);

private:
	bool isInit;
	Generators gene;
	void initialize(const cv::Mat& img);
};

template <class Generator>
BackgroundImageGeneratorSegmented<Generator>::BackgroundImageGeneratorSegmented()
:isInit(false){
}

template <class Generator>
BackgroundImageGeneratorSegmented<Generator>::~BackgroundImageGeneratorSegmented(){
}

template <class Generator>
BackgroundImageGeneratorSegmented<Generator>::BackgroundImageGeneratorSegmented(const BackgroundImageGeneratorSegmented& other)
:isInit(false){
	*this=other;
}

template <class Generator>
const BackgroundImageGeneratorSegmented<Generator>& BackgroundImageGeneratorSegmented<Generator>::operator=(const BackgroundImageGeneratorSegmented<Generator>& other){
	throw "not implemented yet";
	return *this;
}

template <class Generator>
void BackgroundImageGeneratorSegmented<Generator>::generate(const cv::Mat& src, cv::Mat& dst){
	throw "not implemented yet";

}

template <class Generator>
void BackgroundImageGeneratorSegmented<Generator>::update(const cv::Mat& src){
	throw "not implemented yet";

}

template <class Generator>
void BackgroundImageGeneratorSegmented<Generator>::train(const std::vector<cv::Mat>& src){
	throw "not implemented yet";

}

template <class Generator>
void BackgroundImageGeneratorSegmented<Generator>::save(const std::string& _path)const{
	throw "not implemented yet";

}

template <class Generator>
void BackgroundImageGeneratorSegmented<Generator>::load(const std::string& _path){
	throw "not implemented yet";

}

template <class Generator>
void BackgroundImageGeneratorSegmented<Generator>::initialize(const cv::Mat& img){
	throw "not implemented yet";
	
}
#endif